import { UserLoginDto, UserRegisterDto } from '../dtos/auth.dto';
import { generateToken } from '../utils/tokenUtil'; // 引入生成 token 的工具
import { hashPassword, comparePassword } from '../utils/hashUtil'; // 引入加密工具
import UserModel from '../models/user.model';

/**
 * 用户登录
 * @param {UserLogin} user - 用户信息
 * @returns {Promise<string>} - 返回登录的token
 */
export const login = async (user: UserLoginDto): Promise<string> => {
  const userInfo = await UserModel.findOne({ where: { email: user.email } });

  if (!userInfo) {
    throw new Error('此邮箱尚未注册');
  }

  const isPasswordValid = await comparePassword(user.password, userInfo.password);
  if (!isPasswordValid) {
    throw new Error('密码不正确');
  }

  return generateToken({ id: userInfo.id });
};

/**
 * 用户注册
 * @param {UserRegister} user - 用户信息
 * @returns {Promise<boolean>} - 返回新创建的用户
 */
export const register = async (user: UserRegisterDto): Promise<boolean> => {
  user.password = await hashPassword(user.password); // 使用工具类加密密码
  await UserModel.create({ ...user });
  return true; // 返回新用户对象
};
